package br.com.cast.view.produto;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.data.DataView;
import org.apache.wicket.spring.injection.annot.SpringBean;

import br.com.cast.modelo.Produto;
import br.com.cast.nf.NotaFiscal.HomePage;
import br.com.cast.service.IProdutoService;
import br.com.cast.util.ComponentUtil;

public class ListarProduto extends Panel {

	@SpringBean
	private IProdutoService iProdutoService;

	private CadastroProduto cadastroProduto;

	public ListarProduto(String id) {
		super(id);

		setOutputMarkupId(true);

		cadastroProduto = new CadastroProduto(HomePage.conteudo);

		criaLinkIncluir();

		DataView<Produto> dataView = criaDateView();

		criaPaginacao(dataView);

	}

	private void criaPaginacao(DataView<Produto> dataView) {
		add(new PagingNavigator("paginacao", dataView));
	}

	private DataView<Produto> criaDateView() {
		DataView<Produto> dataView = new DataView<Produto>("produtos",
				iProdutoService) {

			@Override
			protected void populateItem(final Item<Produto> item) {

				if (item.getIndex() % 2 != 0) {
					// para linhas impares adiciona um estilo diferente.
					// o indice começa no zero
					item.add(AttributeModifier.replace("class", "alt"));
				}

				item.add(new Label("descricao"));
				item.add(new Label("valor"));

				item.add(new Link("alterar") {
					@Override
					public void onClick() {
						cadastroProduto.atualizaModel(item
								.getDefaultModelObject());
						redirecionaCadastro();
					}

				});

				 item.add(new AjaxLink("excluir") {
				
				 @Override
				 public void onClick(AjaxRequestTarget target) {
				 Produto produto = (Produto) item.getDefaultModelObject();
				 iProdutoService.excluir(produto);
				 HomePage template = ComponentUtil.getTemplate(this);
				 template.success("Registro excluído com sucesso!");
				
				 target.add(template.get("msgErro"));
				 target.add(template.get("msgSucesso"));
				 target.add(template.get(HomePage.conteudo));
				 }
				
				 });
//				item.add(new Link("excluir") {
//					@Override
//					public void onClick() {
//						Produto produto = (Produto) item.getDefaultModelObject();
//						iProdutoService.excluir(produto);
//						HomePage template = ComponentUtil.getTemplate(this);
//						template.success("Registro excluído com sucesso!");
//					}
//
//				});

			}

		};

		dataView.setItemsPerPage(5);

		add(dataView);
		return dataView;
	}

	private void criaLinkIncluir() {

		add(new AjaxLink("incluir") {
			@Override
			public void onClick(AjaxRequestTarget target) {
				redirecionaCadastro();
				target.add(cadastroProduto);
			}
		});

	}

	private void redirecionaCadastro() {
		HomePage template = ComponentUtil.getTemplate(this);
		template.replace(cadastroProduto);
	}
}
